#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <queue>
#include <algorithm>

using namespace std;

//int main() {
//    int num;
//    cin >> num;
//    if (num <= 999) {
//        string ret = to_string(num);
//        cout << ret;
//        return 0;
//    }
//    string ret;
//    string rever = to_string(num);
//
//    reverse(rever.begin(), rever.end());
//    for (int i = 0, j = 0; i < rever.size(); i++) {
//        if (i && (i % 3 == 0)) {
//            ret.push_back(',');
//        }
//        ret.push_back(rever[i]);
//    }
//    reverse(ret.begin(), ret.end());
//    cout << ret;
//}

//int main()
//{
//    if (number < 2) {
//        return number;
//    }
//    vector<int> dp(number + 1, 1);
//    for (int i = 2; i <= number; i++) {
//        dp[i] = dp[i - 1] + dp[i - 2];
//    }
//    return dp[number];
//
//}


class Solution {
public:
    bool IsContinuous(vector<int>& numbers) {
        vector<int> zeros;
        vector<int> nonzeros;
        for (auto& num : numbers)
        {
            if (num == 0) {
                zeros.push_back(num);
            }
            else {
                nonzeros.push_back(num);
            }
        }
        sort(nonzeros.begin(), nonzeros.end());
        int curneed = nonzeros[0] + 1;
        for (int i = 1; i < nonzeros.size(); ) {
            if (curneed != nonzeros[i]) {
                if (zeros.empty()) {
                    return false;
                }
                else {
                    zeros.pop_back();
                    curneed++;
                    continue;
                }
            }
            curneed = nonzeros[i++] + 1;
        }
        return true;
    }
};

int main()
{
    Solution solu;
    vector<int> ret = { 1,3,0,5,0 };
    solu.IsContinuous(ret);
}